package com.ethersg.javabackend.util;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Address;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Bytes1;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class ESGRatingSystem extends Contract {
    public static final String[] BINARY_ARRAY = {"608060405273f4abb7c0624e2311eec36a3e3887da605c14ff246000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006457600080fd5b50612acf806100746000396000f3006080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680624ce534146100d45780632c45b2c1146100fd578063316bde01146101265780634ca0232b146101695780635321e13f146101945780636386c1c7146101d15780637759e9e11461020f57806386723761146102385780638778ae6914610275578063934185ca146102b2578063a4b7b04d146102ef578063ac9f0a4014610318578063c504586714610341578063c6376a361461036c575b600080fd5b3480156100e057600080fd5b506100fb60048036036100f69190810190612166565b610397565b005b34801561010957600080fd5b50610124600480360361011f9190810190612324565b61071f565b005b34801561013257600080fd5b5061014d60048036036101489190810190612050565b610886565b60405161016097969594939291906128aa565b60405180910390f35b34801561017557600080fd5b5061017e610ce3565b60405161018b9190612736565b60405180910390f35b3480156101a057600080fd5b506101bb60048036036101b69190810190612050565b610d71565b6040516101c8919061292e565b60405180910390f35b3480156101dd57600080fd5b506101f860048036036101f39190810190612027565b61110f565b604051610206929190612758565b60405180910390f35b34801561021b57600080fd5b506102366004803603610231919081019061212a565b6112d7565b005b34801561024457600080fd5b5061025f600480360361025a9190810190612027565b611472565b60405161026c919061288f565b60405180910390f35b34801561028157600080fd5b5061029c6004803603610297919081019061208c565b611515565b6040516102a9919061292e565b60405180910390f35b3480156102be57600080fd5b506102d960048036036102d49190810190612027565b611693565b6040516102e6919061288f565b60405180910390f35b3480156102fb57600080fd5b50610316600480360361031191908101906120db565b6117aa565b005b34801561032457600080fd5b5061033f600480360361033a919081019061221f565b6119a1565b005b34801561034d57600080fd5b50610356611c6a565b6040516103639190612736565b60405180910390f35b34801561037857600080fd5b50610381611cf8565b60405161038e919061288f565b60405180910390f35b61039f611dd4565b6000888890501115156103e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103de906127cf565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614151561047b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104729061280f565b60405180910390fd5b60c0604051908101604052806001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508152602001857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508152509050600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050906001820390600052602060002090600602016000909192909190915060008201518160000155602082015181600101908051906020019061064f929190611e43565b50604082015181600201908051906020019061066c929190611e43565b5060608201518160030160006101000a81548160ff02191690837f01000000000000000000000000000000000000000000000000000000000000009004021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816004019080519060200190610711929190611e43565b505050505050505050505050565b84600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115156107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c906127ef565b60405180910390fd5b8383600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020878154811015156107f357fe5b90600052602060002090600602016002019190610811929190611ec3565b508181600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208781548110151561086057fe5b9060005260206000209060060201600401919061087e929190611ec3565b505050505050565b60006060806000806060600061089a611dd4565b60003373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16148061092657506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614155b1515610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e9061282f565b60405180910390fd5b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208a8154811015156109b357fe5b906000526020600020906006020160c0604051908101604052908160008201548152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a705780601f10610a4557610100808354040283529160200191610a70565b820191906000526020600020905b815481529060010190602001808311610a5357829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b505050505081526020016003820160009054906101000a90047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c845780601f10610c5957610100808354040283529160200191610c84565b820191906000526020600020905b815481529060010190602001808311610c6757829003601f168201915b5050505050815250509150610c9d8b8360000151610d71565b9050816000015182602001518360400151846060015185608001518660a00151868595508494508191509850985098509850985098509850505092959891949750929550565b60606001805480602002602001604051908101604052809291908181526020018280548015610d6757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d1d575b5050505050905090565b6000610d7b611f43565b610d83611f43565b610d8b611f43565b600080600080600093505b600180549050841015610f3f57600184815481101515610db257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002089815481101515610e7a57fe5b906000526020600020906006020160050160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff16141515610f32576001866001840360ff16600381101515610efb57fe5b6020020181815101915081815250508060ff16876001840360ff16600381101515610f2257fe5b6020020181815101915081815250505b8380600101945050610d96565b600093505b6003841015610fa1578584600381101515610f5b57fe5b60200201518785600381101515610f6e57fe5b6020020151811515610f7c57fe5b048585600381101515610f8b57fe5b","6020020181815250508380600101945050610f44565b6004866001600381101515610fb257fe5b6020020151876000600381101515610fc657fe5b602002015101876001600381101515610fdb57fe5b6020020151811515610fe957fe5b04866001600381101515610ff957fe5b602002015187600060038110151561100d57fe5b6020020151030281151561101d57fe5b0485600060038110151561102d57fe5b602002018181510191508181525050600886600260038110151561104d57fe5b602002015187600160038110151561106157fe5b602002015188600060038110151561107557fe5b6020020151010187600260038110151561108b57fe5b602002015181151561109957fe5b048660026003811015156110a957fe5b60200201518760006003811015156110bd57fe5b602002015103028115156110cd57fe5b048560006003811015156110dd57fe5b6020020181815101915081815250508460006003811015156110fb57fe5b602002015197505050505050505092915050565b606080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561122b5780601f106112005761010080835404028352916020019161122b565b820191906000526020600020905b81548152906001019060200180831161120e57829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112c75780601f1061129c576101008083540402835291602001916112c7565b820191906000526020600020905b8154815290600101906020018083116112aa57829003601f168201915b5050505050905091509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906127af565b60405180910390fd5b60008160ff161115156113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a79061284f565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060018290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc906127af565b60405180910390fd5b61150e82611d08565b9050919050565b60003373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115a157506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614155b15156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d99061282f565b60405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561162e57fe5b906000526020600020906006020160050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509392505050565b60003373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061171f57506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614155b1515611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117579061282f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008160ff161180156117c1575060648160ff1611155b1515611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f99061278f565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614151515611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e9061286f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156118e457fe5b906000526020600020906006020160050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f5b4f07367c88c7ea962a5eb13df6a68e711b05b6a8c654f917d8f27d609d207c338484604051611994939291906126ff565b60405180910390a2505050565b60a0604051908101604052808b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019080519060200190611b1e929190611e43565b506020820151816001019080519060200190611b3b929190611e43565b506040820151816002019080519060200190611b58929190611e43565b506060820151816003019080519060200190611b75929190611e43565b506080820151816004019080519060200190611b92929190611e43565b5090505060405180807f636f6d70616e790000000000000000000000000000000000000000000000000081525060070190506040518091039020600019168888604051808383808284378201915050925050506040518091039020600019161415611c5e5760043390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50505050505050505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611cee57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611ca4575b5050505050905090565b6000611d0333611d08565b905090565b6000806000809150600090505b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611d7d57611d698482610d71565b60ff16820191508080600101915050611d15565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082811515611dca57fe5b0492505050919050565b60c06040519081016040528060008152602001606081526020016060815260200160007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e8457805160ff1916838001178555611eb2565b82800160010185558215611eb2579182015b82811115611eb1578251825591602001919060010190611e96565b5b509050611ebf9190611f66565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f0457803560ff1916838001178555611f32565b82800160010185558215611f32579182015b82811115611f31578235825591602001919060010190611f16565b5b509050611f3f9190611f66565b5090565b606060405190810160405280600390602082028038833980820191505090505090565b611f8891905b80821115611f84576000816000905550600101611f6c565b5090565b90565b","6000611f9782356129dc565b905092915050565b6000611fab82356129fc565b905092915050565b60008083601f8401121515611fc757600080fd5b8235905067ffffffffffffffff811115611fe057600080fd5b602083019150836001820283011115611ff857600080fd5b9250929050565b600061200b8235612a28565b905092915050565b600061201f8235612a32565b905092915050565b60006020828403121561203957600080fd5b600061204784828501611f8b565b91505092915050565b6000806040838503121561206357600080fd5b600061207185828601611f8b565b925050602061208285828601611fff565b9150509250929050565b6000806000606084860312156120a157600080fd5b60006120af86828701611f8b565b93505060206120c086828701611fff565b92505060406120d186828701611f8b565b9150509250925092565b6000806000606084860312156120f057600080fd5b60006120fe86828701611f8b565b935050602061210f86828701611fff565b925050604061212086828701612013565b9150509250925092565b6000806040838503121561213d57600080fd5b600061214b85828601611f8b565b925050602061215c85828601612013565b9150509250929050565b60008060008060008060006080888a03121561218157600080fd5b600088013567ffffffffffffffff81111561219b57600080fd5b6121a78a828b01611fb3565b9750975050602088013567ffffffffffffffff8111156121c657600080fd5b6121d28a828b01611fb3565b955095505060406121e58a828b01611f9f565b935050606088013567ffffffffffffffff81111561220257600080fd5b61220e8a828b01611fb3565b925092505092959891949750929550565b60008060008060008060008060008060a08b8d03121561223e57600080fd5b60008b013567ffffffffffffffff81111561225857600080fd5b6122648d828e01611fb3565b9a509a505060208b013567ffffffffffffffff81111561228357600080fd5b61228f8d828e01611fb3565b985098505060408b013567ffffffffffffffff8111156122ae57600080fd5b6122ba8d828e01611fb3565b965096505060608b013567ffffffffffffffff8111156122d957600080fd5b6122e58d828e01611fb3565b945094505060808b013567ffffffffffffffff81111561230457600080fd5b6123108d828e01611fb3565b92509250509295989b9194979a5092959850565b60008060008060006060868803121561233c57600080fd5b600061234a88828901611fff565b955050602086013567ffffffffffffffff81111561236757600080fd5b61237388828901611fb3565b9450945050604086013567ffffffffffffffff81111561239257600080fd5b61239e88828901611fb3565b92509250509295509295909350565b6123b681612979565b82525050565b60006123c782612956565b8084526020840193506123d983612949565b60005b8281101561240b576123ef8683516123ad565b6123f88261296c565b91506020860195506001810190506123dc565b50849250505092915050565b61242081612999565b82525050565b600061243182612961565b808452612445816020860160208601612a51565b61244e81612a84565b602085010191505092915050565b6000602882527f496e76616c69642073636f72652c206d757374206265206265747765656e203060208301527f20616e64203130300000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602a82527f4f6e6c792074686520676f7665726e6d656e742063616e2063616c6c2074686960208301527f732066756e6374696f6e000000000000000000000000000000000000000000006040830152606082019050919050565b6000601c82527f50726f6a656374206e616d652063616e6e6f7420626520656d707479000000006020830152604082019050919050565b6000601382527f496e76616c69642070726f6a6563742069642e000000000000000000000000006020830152604082019050919050565b6000602a82527f4173736573736d656e74206167656e636965732063616e6e6f742075706c6f6160208301527f642070726f6a65637473000000000000000000000000000000000000000000006040830152606082019050919050565b6000601282527f5065726d697373696f6e2064656e6965642e00000000000000000000000000006020830152604082019050919050565b6000602582527f496e76616c6964206c6576656c2c206d7573742062652067726561746572207460208301527f68616e20300000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602282527f4f6e6c79206173736573736d656e74206167656e636965732063616e2073636f60208301527f72650000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6126db816129c5565b82525050565b6126ea81612a3f565b82525050565b6126f9816129cf565b82525050565b600060608201905061271460008301866123ad565b61272160208301856126d2565b61272e60408301846126e1565b949350505050565b6000602082019050818103600083015261275081846123bc565b905092915050565b600060408201905081810360008301526127728185612426565b905081810360208301526127868184612426565b90509392505050565b600060208201905081810360008301526127a88161245c565b9050919050565b600060208201905081810360008301526127c8816124b9565b9050919050565b600060208201905081810360008301526127e881612516565b9050919050565b600060208201905081810360008301526128088161254d565b9050919050565b6000602082019050818103600083015261282881612584565b9050919050565b60006020820190508181036000830152612848816125e1565b9050919050565b6000602082019050818103600083015261286881612618565b9050919050565b6000602082019050818103600083015261288881612675565b9050919050565b60006020820190506128a460008301846126d2565b92915050565b600060e0820190506128bf600083018a6126d2565b81810360208301526128d18189612426565b905081810360408301526128e58188612426565b90506128f46060830187612417565b61290160808301866123ad565b81810360a08301526129138185612426565b905061292260c08301846126f0565b98975050505050505050565b600060208201905061294360008301846126f0565b92915050565b6000602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600060ff82169050919050565b6000612a4a826129cf565b9050919050565b60005b83811015612a6f578082015181840152602081019050612a54565b83811115612a7e576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058205f38562a0de4ba135d278e1168695c3c5a630d02cf5d24ea68c0b573543187a66c6578706572696d656e74616cf50037"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"608060405273f4abb7c0624e2311eec36a3e3887da605c14ff246000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006457600080fd5b50612ad0806100746000396000f3006080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a2ec4dd146100d55780632194f8021461010057806332e9d7031461013d57806346ce7f1114610166578063485f0e6c1461018f5780636bb169da146101cc5780636efa3db31461020f5780636f87360a1461023a57806374935b04146102785780637cf4cb0d146102a1578063a020dad1146102de578063c32c35a314610307578063c5c0e4b514610330578063f00dc5f61461036d575b600080fd5b3480156100e157600080fd5b506100ea610398565b6040516100f79190612737565b60405180910390f35b34801561010c57600080fd5b5061012760048036036101229190810190612051565b610426565b604051610134919061292f565b60405180910390f35b34801561014957600080fd5b50610164600480360361015f9190810190612220565b6107c4565b005b34801561017257600080fd5b5061018d60048036036101889190810190612325565b610a8d565b005b34801561019b57600080fd5b506101b660048036036101b19190810190612028565b610bf4565b6040516101c39190612890565b60405180910390f35b3480156101d857600080fd5b506101f360048036036101ee9190810190612051565b610d0b565b60405161020697969594939291906128ab565b60405180910390f35b34801561021b57600080fd5b50610224611168565b6040516102319190612737565b60405180910390f35b34801561024657600080fd5b50610261600480360361025c9190810190612028565b6111f6565b60405161026f929190612759565b60405180910390f35b34801561028457600080fd5b5061029f600480360361029a91908101906120dc565b6113be565b005b3480156102ad57600080fd5b506102c860048036036102c39190810190612028565b6115b5565b6040516102d59190612890565b60405180910390f35b3480156102ea57600080fd5b5061030560048036036103009190810190612167565b611658565b005b34801561031357600080fd5b5061032e6004803603610329919081019061212b565b6119e0565b005b34801561033c57600080fd5b506103576004803603610352919081019061208d565b611b7b565b604051610364919061292f565b60405180910390f35b34801561037957600080fd5b50610382611cf9565b60405161038f9190612890565b60405180910390f35b6060600480548060200260200160405190810160405280929190818152602001828054801561041c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103d2575b5050505050905090565b6000610430611dd5565b610438611dd5565b610440611dd5565b600080600080600093505b6001805490508410156105f45760018481548110151561046757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208981548110151561052f57fe5b906000526020600020906006020160050160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161415156105e7576001866001840360ff166003811015156105b057fe5b6020020181815101915081815250508060ff16876001840360ff166003811015156105d757fe5b6020020181815101915081815250505b838060010194505061044b565b600093505b600384101561065657858460038110151561061057fe5b6020020151878560038110151561062357fe5b602002015181151561063157fe5b04858560038110151561064057fe5b60200201818152505083806001019450506105f9565b600486600160038110151561066757fe5b602002015187600060038110151561067b57fe5b60200201510187600160038110151561069057fe5b602002015181151561069e57fe5b048660016003811015156106ae57fe5b60200201518760006003811015156106c257fe5b602002015103028115156106d257fe5b048560006003811015156106e257fe5b602002018181510191508181525050600886600260038110151561070257fe5b602002015187600160038110151561071657fe5b602002015188600060038110151561072a57fe5b6020020151010187600260038110151561074057fe5b602002015181151561074e57fe5b0486600260038110151561075e57fe5b602002015187600060038110151561077257fe5b6020020151030281151561078257fe5b0485600060038110151561079257fe5b6020020181815101915081815250508460006003811015156107b057fe5b602002015197505050505050505092915050565b60a0604051908101604052808b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019080519060200190610941929190611df8565b50602082015181600101908051906020019061095e929190611df8565b50604082015181600201908051906020019061097b929190611df8565b506060820151816003019080519060200190610998929190611df8565b5060808201518160040190805190602001906109b5929190611df8565b5090505060405180807f636f6d70616e790000000000000000000000000000000000000000000000000081525060070190506040518091039020600019168888604051808383808284378201915050925050506040518091039020600019161415610a815760043390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50505050505050505050565b84600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111515610b13576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610b0a90612810565b60405180910390fd5b8383600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002087815481101515610b6157fe5b90600052602060002090600602016002019190610b7f929190611e78565b508181600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002087815481101515610bce57fe5b90600052602060002090600602016004019190610bec929190611e78565b505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610c8057506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614155b1515610cc1576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610cb890612850565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600060608060008060606000610d1f611ef8565b60003373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161480610dab57506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614155b1515610dec576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610de390612850565b60405180910390fd5b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208a815481101515610e3857fe5b906000526020600020906006020160c0604051908101604052908160008201548152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ef55780601f10610eca57610100808354040283529160200191610ef5565b820191906000526020600020905b815481529060010190602001808311610ed857829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f975780601f10610f6c57610100808354040283529160200191610f97565b820191906000526020600020905b815481529060010190602001808311610f","7a57829003601f168201915b505050505081526020016003820160009054906101000a90047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111095780601f106110de57610100808354040283529160200191611109565b820191906000526020600020905b8154815290600101906020018083116110ec57829003601f168201915b50505050508152505091506111228b8360000151610426565b9050816000015182602001518360400151846060015185608001518660a00151868595508494508191509850985098509850985098509850505092959891949750929550565b606060018054806020026020016040519081016040528092919081815260200182805480156111ec57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111a2575b5050505050905090565b606080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113125780601f106112e757610100808354040283529160200191611312565b820191906000526020600020905b8154815290600101906020018083116112f557829003601f168201915b50505050509150808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ae5780601f10611383576101008083540402835291602001916113ae565b820191906000526020600020905b81548152906001019060200180831161139157829003601f168201915b5050505050905091509150915091565b60008160ff161180156113d5575060648160ff1611155b1515611416576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161140d90612830565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16141515156114ab576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016114a2906127f0565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156114f857fe5b906000526020600020906006020160050160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508273ffffffffffffffffffffffffffffffffffffffff167fa6f30a6f74aa9b4b4bcc9d03f0ea3c2c3e6d8d4feace6d51a553570ce704542e3384846040516115a893929190612700565b60405180910390a2505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611648576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161163f906127d0565b60405180910390fd5b61165182611d09565b9050919050565b611660611ef8565b6000888890501115156116a8576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161169f90612790565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614151561173c576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161173390612870565b60405180910390fd5b60c0604051908101604052806001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508152602001857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508152509050600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020906006020160009091929091909150600082015181600001556020820151816001019080519060200190611910929190611df8565b50604082015181600201908051906020019061192d929190611df8565b5060608201518160030160006101000a81548160ff02191690837f01000000000000000000000000000000000000000000000000000000000000009004021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040190805190602001906119d2929190611df8565b505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a71576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611a68906127d0565b60405180910390fd5b60008160ff16111515611ab9576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611ab0906127b0565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060018290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60003373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c0757506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614155b1515611c48576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611c3f90612850565b60405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611c9457fe5b906000526020600020906006020160050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509392505050565b6000611d0433611d09565b905090565b6000806000809150600090505b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611d7e57611d6a8482610426565b60ff16820191508080600101915050611d16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082811515611dcb57fe5b0492505050919050565b606060405190810160405280600390602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e3957805160ff1916838001178555611e67565b82800160010185558215611e67579182015b82811115611e66578251825591602001919060010190611e4b565b5b509050611e749190611f67565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611eb957803560ff1916838001178555611ee7565b82800160010185558215611ee7579182015b82811115611ee6578235825591602001919060010190611ecb565b5b509050611ef49190611f67565b5090565b60c06040519081016040528060008152602001606081526020016060815260200160007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b611f8991905b80821115611f85576000816000905550600101611f6d565b5090565b9056","5b6000611f9882356129dd565b905092915050565b6000611fac82356129fd565b905092915050565b60008083601f8401121515611fc857600080fd5b8235905067ffffffffffffffff811115611fe157600080fd5b602083019150836001820283011115611ff957600080fd5b9250929050565b600061200c8235612a29565b905092915050565b60006120208235612a33565b905092915050565b60006020828403121561203a57600080fd5b600061204884828501611f8c565b91505092915050565b6000806040838503121561206457600080fd5b600061207285828601611f8c565b925050602061208385828601612000565b9150509250929050565b6000806000606084860312156120a257600080fd5b60006120b086828701611f8c565b93505060206120c186828701612000565b92505060406120d286828701611f8c565b9150509250925092565b6000806000606084860312156120f157600080fd5b60006120ff86828701611f8c565b935050602061211086828701612000565b925050604061212186828701612014565b9150509250925092565b6000806040838503121561213e57600080fd5b600061214c85828601611f8c565b925050602061215d85828601612014565b9150509250929050565b60008060008060008060006080888a03121561218257600080fd5b600088013567ffffffffffffffff81111561219c57600080fd5b6121a88a828b01611fb4565b9750975050602088013567ffffffffffffffff8111156121c757600080fd5b6121d38a828b01611fb4565b955095505060406121e68a828b01611fa0565b935050606088013567ffffffffffffffff81111561220357600080fd5b61220f8a828b01611fb4565b925092505092959891949750929550565b60008060008060008060008060008060a08b8d03121561223f57600080fd5b60008b013567ffffffffffffffff81111561225957600080fd5b6122658d828e01611fb4565b9a509a505060208b013567ffffffffffffffff81111561228457600080fd5b6122908d828e01611fb4565b985098505060408b013567ffffffffffffffff8111156122af57600080fd5b6122bb8d828e01611fb4565b965096505060608b013567ffffffffffffffff8111156122da57600080fd5b6122e68d828e01611fb4565b945094505060808b013567ffffffffffffffff81111561230557600080fd5b6123118d828e01611fb4565b92509250509295989b9194979a5092959850565b60008060008060006060868803121561233d57600080fd5b600061234b88828901612000565b955050602086013567ffffffffffffffff81111561236857600080fd5b61237488828901611fb4565b9450945050604086013567ffffffffffffffff81111561239357600080fd5b61239f88828901611fb4565b92509250509295509295909350565b6123b78161297a565b82525050565b60006123c882612957565b8084526020840193506123da8361294a565b60005b8281101561240c576123f08683516123ae565b6123f98261296d565b91506020860195506001810190506123dd565b50849250505092915050565b6124218161299a565b82525050565b600061243282612962565b808452612446816020860160208601612a52565b61244f81612a85565b602085010191505092915050565b6000601c82527f50726f6a656374206e616d652063616e6e6f7420626520656d707479000000006020830152604082019050919050565b6000602582527f496e76616c6964206c6576656c2c206d7573742062652067726561746572207460208301527f68616e20300000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602a82527f4f6e6c792074686520676f7665726e6d656e742063616e2063616c6c2074686960208301527f732066756e6374696f6e000000000000000000000000000000000000000000006040830152606082019050919050565b6000602282527f4f6e6c79206173736573736d656e74206167656e636965732063616e2073636f60208301527f72650000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601382527f496e76616c69642070726f6a6563742069642e000000000000000000000000006020830152604082019050919050565b6000602882527f496e76616c69642073636f72652c206d757374206265206265747765656e203060208301527f20616e64203130300000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601282527f5065726d697373696f6e2064656e6965642e00000000000000000000000000006020830152604082019050919050565b6000602a82527f4173736573736d656e74206167656e636965732063616e6e6f742075706c6f6160208301527f642070726f6a65637473000000000000000000000000000000000000000000006040830152606082019050919050565b6126dc816129c6565b82525050565b6126eb81612a40565b82525050565b6126fa816129d0565b82525050565b600060608201905061271560008301866123ae565b61272260208301856126d3565b61272f60408301846126e2565b949350505050565b6000602082019050818103600083015261275181846123bd565b905092915050565b600060408201905081810360008301526127738185612427565b905081810360208301526127878184612427565b90509392505050565b600060208201905081810360008301526127a98161245d565b9050919050565b600060208201905081810360008301526127c981612494565b9050919050565b600060208201905081810360008301526127e9816124f1565b9050919050565b600060208201905081810360008301526128098161254e565b9050919050565b60006020820190508181036000830152612829816125ab565b9050919050565b60006020820190508181036000830152612849816125e2565b9050919050565b600060208201905081810360008301526128698161263f565b9050919050565b6000602082019050818103600083015261288981612676565b9050919050565b60006020820190506128a560008301846126d3565b92915050565b600060e0820190506128c0600083018a6126d3565b81810360208301526128d28189612427565b905081810360408301526128e68188612427565b90506128f56060830187612418565b61290260808301866123ae565b81810360a08301526129148185612427565b905061292360c08301846126f1565b98975050505050505050565b600060208201905061294460008301846126f1565b92915050565b6000602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600060ff82169050919050565b6000612a4b826129d0565b9050919050565b60005b83811015612a70578082015181840152602081019050612a55565b83811115612a7f576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820b398789899e3757ffab8ae5c63eeb8c1c8535397965f4c0c3ea78fdc32e2d9766c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"_projectName\",\"type\":\"string\"},{\"name\":\"_projectDescription\",\"type\":\"string\"},{\"name\":\"_property\",\"type\":\"bytes1\"},{\"name\":\"_fileUrl\",\"type\":\"string\"}],\"name\":\"uploadProject\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"},{\"name\":\"_projectDescription\",\"type\":\"string\"},{\"name\":\"_fileUrl\",\"type\":\"string\"}],\"name\":\"modifyProject\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_company\",\"type\":\"address\"},{\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"viewProject\",\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"property\",\"type\":\"bytes1\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"fileUrl\",\"type\":\"string\"},{\"name\":\"score\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAssessmentAgencies\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_company\",\"type\":\"address\"},{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"calculateProjectScore\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getUserInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"agency\",\"type\":\"address\"},{\"name\":\"level\",\"type\":\"uint8\"}],\"name\":\"registerAssessmentAgency\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_company\",\"type\":\"address\"}],\"name\":\"getCompanyScore\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_company\",\"type\":\"address\"},{\"name\":\"_projectId\",\"type\":\"uint256\"},{\"name\":\"_assessment\",\"type\":\"address\"}],\"name\":\"getProjectScore\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_company\",\"type\":\"address\"}],\"name\":\"getProjectsAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"company\",\"type\":\"address\"},{\"name\":\"projectId\",\"type\":\"uint256\"},{\"name\":\"score\",\"type\":\"uint8\"}],\"name\":\"scoreESG\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_username\",\"type\":\"string\"},{\"name\":\"_identity\",\"type\":\"string\"},{\"name\":\"_organizationCode\",\"type\":\"string\"},{\"name\":\"_registrationAddress\",\"type\":\"string\"},{\"name\":\"_domain\",\"type\":\"string\"}],\"name\":\"registerUser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCompanys\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCompanyScore\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"company\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"assessment\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newScore\",\"type\":\"uint256\"}],\"name\":\"ScoreChanged\",\"type\":\"event\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_UPLOADPROJECT = "uploadProject";

    public static final String FUNC_MODIFYPROJECT = "modifyProject";

    public static final String FUNC_VIEWPROJECT = "viewProject";

    public static final String FUNC_GETASSESSMENTAGENCIES = "getAssessmentAgencies";

    public static final String FUNC_CALCULATEPROJECTSCORE = "calculateProjectScore";

    public static final String FUNC_GETUSERINFO = "getUserInfo";

    public static final String FUNC_REGISTERASSESSMENTAGENCY = "registerAssessmentAgency";

    public static final String FUNC_GETCOMPANYSCORE = "getCompanyScore";

    public static final String FUNC_GETPROJECTSCORE = "getProjectScore";

    public static final String FUNC_GETPROJECTSAMOUNT = "getProjectsAmount";

    public static final String FUNC_SCOREESG = "scoreESG";

    public static final String FUNC_REGISTERUSER = "registerUser";

    public static final String FUNC_GETCOMPANYS = "getCompanys";

    public static final Event SCORECHANGED_EVENT = new Event("ScoreChanged", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
    ;

    protected ESGRatingSystem(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public TransactionReceipt uploadProject(String _projectName, String _projectDescription, byte[] _property, String _fileUrl) {
        final Function function = new Function(
                FUNC_UPLOADPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectName), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectDescription), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes1(_property), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_fileUrl)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] uploadProject(String _projectName, String _projectDescription, byte[] _property, String _fileUrl, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UPLOADPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectName), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectDescription), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes1(_property), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_fileUrl)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUploadProject(String _projectName, String _projectDescription, byte[] _property, String _fileUrl) {
        final Function function = new Function(
                FUNC_UPLOADPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectName), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectDescription), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes1(_property), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_fileUrl)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, byte[], String> getUploadProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UPLOADPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes1>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, byte[], String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (byte[]) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public TransactionReceipt modifyProject(BigInteger _projectId, String _projectDescription, String _fileUrl) {
        final Function function = new Function(
                FUNC_MODIFYPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectDescription), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_fileUrl)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] modifyProject(BigInteger _projectId, String _projectDescription, String _fileUrl, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_MODIFYPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectDescription), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_fileUrl)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForModifyProject(BigInteger _projectId, String _projectDescription, String _fileUrl) {
        final Function function = new Function(
                FUNC_MODIFYPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_projectDescription), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_fileUrl)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<BigInteger, String, String> getModifyProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_MODIFYPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<BigInteger, String, String>(

                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public Tuple7<BigInteger, String, String, byte[], String, String, BigInteger> viewProject(String _company, BigInteger _id) throws ContractException {
        final Function function = new Function(FUNC_VIEWPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_company), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_id)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes1>() {}, new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, String, byte[], String, String, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (byte[]) results.get(3).getValue(), 
                (String) results.get(4).getValue(), 
                (String) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue());
    }

    public List getAssessmentAgencies() throws ContractException {
        final Function function = new Function(FUNC_GETASSESSMENTAGENCIES, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public BigInteger calculateProjectScore(String _company, BigInteger _projectId) throws ContractException {
        final Function function = new Function(FUNC_CALCULATEPROJECTSCORE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_company), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public Tuple2<String, String> getUserInfo(String _address) throws ContractException {
        final Function function = new Function(FUNC_GETUSERINFO, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_address)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt registerAssessmentAgency(String agency, BigInteger level) {
        final Function function = new Function(
                FUNC_REGISTERASSESSMENTAGENCY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(agency), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(level)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] registerAssessmentAgency(String agency, BigInteger level, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REGISTERASSESSMENTAGENCY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(agency), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(level)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRegisterAssessmentAgency(String agency, BigInteger level) {
        final Function function = new Function(
                FUNC_REGISTERASSESSMENTAGENCY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(agency), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(level)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getRegisterAssessmentAgencyInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REGISTERASSESSMENTAGENCY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public BigInteger getCompanyScore(String _company) throws ContractException {
        final Function function = new Function(FUNC_GETCOMPANYSCORE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_company)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public BigInteger getProjectScore(String _company, BigInteger _projectId, String _assessment) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTSCORE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_company), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(_assessment)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public BigInteger getProjectsAmount(String _company) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTSAMOUNT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_company)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt scoreESG(String company, BigInteger projectId, BigInteger score) {
        final Function function = new Function(
                FUNC_SCOREESG, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(company), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(score)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] scoreESG(String company, BigInteger projectId, BigInteger score, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SCOREESG, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(company), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(score)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForScoreESG(String company, BigInteger projectId, BigInteger score) {
        final Function function = new Function(
                FUNC_SCOREESG, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(company), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint8(score)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, BigInteger, BigInteger> getScoreESGInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SCOREESG, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint8>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, BigInteger, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue()
                );
    }

    public TransactionReceipt registerUser(String _username, String _identity, String _organizationCode, String _registrationAddress, String _domain) {
        final Function function = new Function(
                FUNC_REGISTERUSER, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_username), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_identity), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_organizationCode), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_registrationAddress), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_domain)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] registerUser(String _username, String _identity, String _organizationCode, String _registrationAddress, String _domain, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REGISTERUSER, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_username), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_identity), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_organizationCode), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_registrationAddress), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_domain)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRegisterUser(String _username, String _identity, String _organizationCode, String _registrationAddress, String _domain) {
        final Function function = new Function(
                FUNC_REGISTERUSER, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_username), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_identity), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_organizationCode), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_registrationAddress), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_domain)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<String, String, String, String, String> getRegisterUserInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REGISTERUSER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<String, String, String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (String) results.get(4).getValue()
                );
    }

    public List getCompanys() throws ContractException {
        final Function function = new Function(FUNC_GETCOMPANYS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public BigInteger getCompanyScore() throws ContractException {
        final Function function = new Function(FUNC_GETCOMPANYSCORE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public List<ScoreChangedEventResponse> getScoreChangedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(SCORECHANGED_EVENT, transactionReceipt);
        ArrayList<ScoreChangedEventResponse> responses = new ArrayList<ScoreChangedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ScoreChangedEventResponse typedResponse = new ScoreChangedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.company = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.assessment = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.newScore = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeScoreChangedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(SCORECHANGED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeScoreChangedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(SCORECHANGED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static ESGRatingSystem load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new ESGRatingSystem(contractAddress, client, credential);
    }

    public static ESGRatingSystem deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(ESGRatingSystem.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class ScoreChangedEventResponse {
        public TransactionReceipt.Logs log;

        public String company;

        public String assessment;

        public BigInteger projectId;

        public BigInteger newScore;
    }
}
